package com.hyt.it.ogt.kq.service.gov.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.common.gov.utils.GovPage;
import com.hyt.it.ogt.kq.service.gov.model.dto.examiner.OrgTreeParamDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.Examiner;
import com.hyt.it.ogt.kq.service.gov.model.param.ExaminerAllocationParam;
import com.hyt.it.ogt.kq.service.gov.model.param.ExaminerParam;
import com.hyt.it.ogt.kq.service.gov.model.param.TaskExaminerParam;
import com.hyt.it.ogt.kq.service.gov.model.param.TimeRoomExaminerParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.examiner.KwExaminerVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.examiner.TimeRoomExaminerVO;
import com.hyt.loginfo.model.OfficeUserVO;
import com.hyt.loginfo.model.Tree;
import com.hyt.loginfo.model.User;

import java.util.List;

/**
 * <p>
 * 考务人员 服务类
 * </p>
 *
 * @author wangg
 * @since 2021-11-25
 */
public interface IExaminerService extends IService<Examiner> {
    /**
     * 获取考务人员部门树
     * @return
     */
    List<Tree> getKwExaminerOrgTree(String taskId, String timeId) throws Exception;

    /**
     * 获取考务人员部门树子节点
     * @param taskId
     * @param deptId
     * @return
     */
    List<OfficeUserVO> getOfficeUserPageSet(String taskId, String timeId, String deptId) throws Exception;

    /**
     * 获取考务人员信息列表
     * @param timeRoomExaminerParam
     * @return 获取考务人员信息列表
     */
    Page<TimeRoomExaminerVO> getKwExaminerList(TimeRoomExaminerParam timeRoomExaminerParam) throws Exception;


    /**
     * 获取考务人员信息列表
     *
     * @param pageParam
     * @param timeRoomExaminerParam
     * @return 获取考务人员信息列表
     */
    Page<TimeRoomExaminerVO> getKwExaminerListV2(GovPage<KwExaminerVO> pageParam, TimeRoomExaminerParam timeRoomExaminerParam) throws Exception;

    /**
     * 保存考务人员监考老师设置
     * @param timeRoomExaminerParam
     * @return 保存考务人员监考老师设置
     */
    void saveKwExaminerListByTime(TimeRoomExaminerParam timeRoomExaminerParam) throws Exception;

    /**
     * 保存考务人员监考老师设置
     *
     * @param timeRoomExaminerParam
     * @param user
     * @return 保存考务人员监考老师设置
     */
    void saveKwExaminerListByTimeV2(TaskExaminerParam timeRoomExaminerParam, User user) throws Exception;

    /**
     * 修改考务人员信息
     * @param timeRoomExaminerVO
     * @return 修改考务人员信息
     */
    void updateKwExaminerInfo(TimeRoomExaminerVO timeRoomExaminerVO) throws Exception;

    /**
     * 重置考务人员密码
     * @param examinerParam
     * @return
     */
    void resetKwExarminerPwd(ExaminerParam examinerParam) throws Exception;

    /**
     * 分配考务人员
     * @param param 分配考务人员参数
     */
    void examinerAllocation(ExaminerAllocationParam param);

    /**
     * 删除考试任务下的考务人员数据
     * @param taskId 考试任务id
     */
    void deleteByTask(String taskId);

    /**
     * 删除考试任务下的考务人员数据（考务人员、批次考务人员、考务人员分配数据）
     * @param taskId 考试任务id
     */
    void deleteAllByTask(String taskId);

    /**
     * 获取机构部门树
     * @param param
     * @return
     */
    List<Tree> getKwOrgTree(OrgTreeParamDTO param);

    /**
     * 获取机构人员
     *
     * @param pageParam
     * @param param
     * @return
     */
    Page<KwExaminerVO> getKwExaminer(Page<KwExaminerVO> pageParam, OrgTreeParamDTO param);

    /**
     * 删除任务下监控人员
     *
     * @param taskId
     * @param userId
     * @param user
     * @return
     */
    Boolean deleteKwExaminer(String taskId, List<String> userId, User user);

    /**
     * 用与判断当前选择的下级管理员是否是监控员
     * @param taskId
     * @param userId
     * @param currentUser
     */
    void isExaminer(String taskId, List<String> userId, User currentUser);

    /**
     * 获取当前任务绑定的监考员userid
     * @param taskId
     * @return
     */
    List<String> queryTaskExaminer(String taskId);
}
